package com.hyt.it.ogt.ks.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hyt.it.ogt.ks.api.kw.model.ApplyCheckDTO;
import com.hyt.it.ogt.ks.api.kw.model.PageApplyCheckDTO;
import com.hyt.it.ogt.ks.model.entity.ApplyCheck;
import com.hyt.it.ogt.ks.model.entity.ApplyCheckMsg;
import com.hyt.it.ogt.ks.model.vo.ApplyCheckVO;
import com.hyt.it.ogt.ks.model.vo.CandidateLogBeginTimeVO;
import com.hyt.it.ogt.ks.model.vo.DeviceVO;

import java.util.List;

/**
 * <p>
 * 跳过申请审核表 服务类
 * </p>
 *
 * @author liteng
 * @since 2022-11-30
 */
public interface IApplyCheckService extends IService<ApplyCheck> {

    Page<ApplyCheck> pageApplyCheck(PageApplyCheckDTO pageApplyCheckDTO);

    /**
     * 审核后会返回下一条待审核的对象，通过更新时间倒序取第一条进行返回
     *
     * @param applyCheck 审核参数
     * @return 下一条待审核
     */
    ApplyCheck applyCheck(ApplyCheckDTO applyCheck);

    ApplyCheck nextApplyCheck(ApplyCheckDTO applyCheck);

    DeviceVO applyCheckDeviceInfo(String applyCheckId);

    /**
     * 检查学生是否有未收到的审核过了的结果
     *
     * @param examId 考试id
     * @param candidateId 考生id
     */
    void wsOpenCheckAndSendApplyResult(String examId, String candidateId);

    /**
     * 主动发送消息给学生告知结果
     *
     * @param applyCheckMsgs 审核消息发送记录
     */
    void sendApplyCheckResult2Student(List<ApplyCheckMsg> applyCheckMsgs);

    /**
     * 发送消息给学生告知结果
     *
     * @param examId 考试id
     * @param candidateId 考生id
     * @param eventType 事件类型
     * @param operateType 操作类型
     */
    void sendApplyCheckResult2Student(String examId, String candidateId, int eventType, int operateType);

    /**
     * 设备检测跳过审核结果
     *
     * @param examId 考试id
     * @param candidateId 考生id
     * @return
     */
    Integer deviceVerifyResult(String examId, String candidateId);

    /**
     * 获取考生审核数据
     *
     * @param examId
     * @param candidateId
     * @param eventType
     * @param operateType
     * @param state
     * @return
     */
    ApplyCheck getCandidateApplyCheck(String examId, String candidateId, int eventType, int operateType, Integer state);

    /**
     * 跳过申请
     *
     * @param param
     * @param opType
     */
    void skipApply(ApplyCheckVO param, int opType, String type);

    /**
     * 根据考试id查询已通过的考生id列表
     * @param examId
     * @param candidateIds
     * @return
     */
    List<String> findApplyCheckCandidateIdAuditPassList(String examId, String candidateIds);

    /**
     *获取考生人脸核身审核不通过时间
     * @param examId
     * @return
     */
    List<CandidateLogBeginTimeVO> getApplyCheckUnPassFaceTime(String examId);



}
